'use strict'

const http = require('http')

/*
* .jpg .jpeg   -> image/jpeg
* .png -> image/png
* .gif -> image/gif
* .ico -> image/x-icon
* .txt -> text/plain
* .json -> .text/json 或 application/json
* .xml  -> text/xml 或 application/xml
*
*/


let html = `
    <!DOCTYPE html>
    <html>
        <head>
            <title>First HTTP</title>
        </head>
        <body>
            你好
        </body>
    </html> 
`
let routerTable ={

    '/':async (request, response) =>{
        response.setHeader('content-type', 'text/html; charset=utf-8')
        response.end(html)
    },

    './test' : async (request, response) =>{
        let status = parseInt(Math.random() * 200) +199
        response.statusCode = status
        response.end('test end')
    },
    '/data': async(request, response) =>{
        let bufferList = []
        let bufferLength = 0
        request.on('data', chunk =>{
            bufferLength += chunk.length
            bufferList.push(chunk)
        })
        let bodyData = null;
        response.on('end', ()=>{
            if(bufferList.length > 0){
                bodyData = Bufffer.concat(bufferList,bufferLength)
                bufferList = []
            }
    
            if(bodyData) {
                response.end(bodyData)
            }else{
                response.end()
            }
        })
    }
}
http.createServer((request, response) => {
    if( !routerTable[ request.url]) {
        response.statusCode = 484
        response.end('page not found')
        return
    }
    routerTable[ request.url](request, response)
}).listen(3456)
